﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Xml.Serialization;

namespace ButsaScraperLib
{
	public class Player: IEquatable<Player>
	{
		/// <summary>
		/// Идентификатор игрока.
		/// http://butsa.ru/xml/players/info.php?id=453929
		/// </summary>
		public string Id { get; set; }

		/// <summary> Имя игрока. </summary>
		public string Name { get; set; }

		/// <summary> Номер игрока на поле. </summary>
		public string Number { get; set; }

		/// <summary> Признак дисквалификации на следуюущую игру. </summary>
		public bool IsDiscvalificated { get; set; }

		/// <summary> Признак травмированности на следующую игру. </summary>
		public bool IsTraumed { get; set; }

		/// <summary> Основная позиция. </summary>
		public Position PrimaryPosition { get; set; }

		/// <summary> Второстепенная позиция. </summary>
		public Position? SecondaryPosition { get; set; }

		/// <summary> Рассчетный таланта игрока. </summary>
		public double Talent { get; set; }

		/// <summary> Отбор. </summary>
		public double TakingSkill { get; set; }

		/// <summary> Опека. </summary>
		public double MarkingSkill { get; set; }

		/// <summary> Дриблинг. </summary>
		public double DribblingSkill { get; set; }

		/// <summary> Приём. </summary>
		public double ReceptionSkill { get; set; }

		/// <summary> Выносливость. </summary>
		public double StaminaSkill { get; set; }

		/// <summary> Пас. </summary>
		public double PassSkill { get; set; }

		/// <summary> Сила удара. </summary>
		public double StrikeValueSkill { get; set; }

		/// <summary> Точность удара. </summary>
		public double StrikeAccuracySkill { get; set; }

		/// <summary> Возраст. </summary>
		public int Age { get; set; }

		/// <summary> Физическая готовность. </summary>
		public double PhysicalFitness { get; set; }

		/// <summary> Мораль. </summary>
		public int Morality { get; set; }

		/// <summary> Усталость. </summary>
		public double Tiredness { get; set; }

		private List<KeyValuePair<Bonus, int>> _bonusesList = new List<KeyValuePair<Bonus, int>>();
		public List<KeyValuePair<Bonus, int>> BonusesList 
		{
			get { return _bonusesList; }
			set { _bonusesList = value; }
		}

		/// <summary> 
		/// Мастерство как простая сумма величин умений. 
		/// </summary>
		public double CurrentTotalSkill { get; set; }

		/// <summary> Расчётное мастерство с текущей физикой и моралью. </summary>
		public double ActualTotalSkill
		{
			get
			{
				return CurrentTotalSkill*PhysicalFitness*0.01*(1 + (Morality - 13)*0.008);
			}
		}

		public Player()
		{
			
		}

		public bool Equals(Player other)
		{
			return Id.Equals(other.Id);
		}

		public override int GetHashCode()
		{
			return Id.GetHashCode();
		}

	}
}
